    #include<iostream>


    using namespace std ;

    const int maxn = 11 ;
    int n = 8 , m;
    int path[maxn] ;
    bool st[maxn] ;
    int count ;
    int list[maxn][maxn] ;

    void perm(int x ) {
        if(x == n ){
            for (int i = 0; i < n; ++i) {
    //            printf("%d " , path[i]);
                list[count][i] = path[i];
            }
            count ++ ;
    //        printf("\n");
            return ;
        }

        for(int i = 1 ; i <= n ; i++) {
            if(!st[i]) {
                bool flag = true ;  //可以继续插
                //如果当前这个可以插进去的话
                //就在插进去之前检查一下前面的列是否跟即将插进去的有冲突
                for(int k = 0 ; k < x ; k ++) {
                    if(abs(k - x) == abs(path[k] - i)) {
                        flag = false ;  //不可以继续插了
                        break;
                    }
                }
                if(flag){
                    path[x] = i ;
                    st[i] = true ;
                    perm(x + 1);
                    st[i] = false ;
                }
            }
        }
    }

    int main() {

        scanf("%d" , &m);
        perm(0);
        while(m--){
            int k ;
            scanf("%d" , &k);
            for (int i = 0; i < n; ++i) {
                printf("%d" , list[k - 1][i]);
                if(i == n -1 && m != 0) {
                    printf(" ");
                }
            }
            if(m != 0){
                printf("\n");
            }
        }
    //    printf("%d", count );
        return 0 ;
    }